package com.uchengwang.functions.db.manager;

import android.content.Context;

import com.litesuits.orm.LiteOrm;
import com.litesuits.orm.db.DataBaseConfig;
import com.litesuits.orm.db.assit.QueryBuilder;
import com.litesuits.orm.db.assit.WhereBuilder;
import com.litesuits.orm.db.model.ColumnsValue;
import com.litesuits.orm.db.model.ConflictAlgorithm;
import com.uchengwang.ui.UChengApplication;
import com.uchengwang.ui.utils.UCommonUtil;

import java.util.List;

public class LiteOrmDBUtil {

    private static String DB_NAME;
    private static LiteOrm liteOrm;
    private static LiteOrmDBUtil util;
    private LiteOrmDBUtil (){}

    private static void createDb(Context _activity) {
        DB_NAME = "ucw" + UCommonUtil.getUtil().getId() + ".db";
        DataBaseConfig config = new DataBaseConfig(_activity, DB_NAME);
        config.dbVersion = 1; // set database version
        config.onUpdateListener = null; // set database update listener

        liteOrm = LiteOrm.newCascadeInstance(config);
        liteOrm.setDebugged(true);
    }

    public static LiteOrmDBUtil getLiteOrm(Context context){
        if (liteOrm == null || util ==null || UChengApplication.isAccountChange){
            util= new LiteOrmDBUtil();
            createDb(context.getApplicationContext());
        }
        return util;
    }

    /**
     * 插入一条记录
     *
     * @param t
     */
    public <T> void insert(T t) {
        liteOrm.save(t);

    }

    public <T> boolean replas(T t) {
        long insert = liteOrm.insert(t, ConflictAlgorithm.Replace);
        return insert > 0;
    }

    /**
     * 插入所有记录
     *
     * @param list
     */
    public <T> void insertAll(List<T> list) {
        liteOrm.save(list);
    }

    /**
     * 查询所有
     *
     * @param cla
     * @return
     */
    public <T> List<T> getQueryAll(Class<T> cla) {

        return liteOrm.query(cla);
    }

    /**
     * 查询  某字段 等于 Value的值
     *
     * @param cla
     * @param field
     * @param value
     * @return
     */
    public <T> List<T> getQueryByWhere(Class<T> cla, String field, Object value) {
        return liteOrm.<T>query(new QueryBuilder(cla).where(field + " = ? ", value));
    }

    /**
     * 查询  某字段 等于 Value的值  可以指定从1-20，就是分页
     *
     * @param cla
     * @param field
     * @param value
     * @param start
     * @param length
     * @return
     */
    public <T> List<T> getQueryByWhereLength(Class<T> cla, String field, String value, int start, int length) {
        return liteOrm.<T>query(new QueryBuilder(cla).where(field + "=?", value).limit(start, length));
    }

    /**
     * 查询 根据某字段 分页查询 倒序  distinct去重
     * */
    public <T> List<T> getQueryByWhereLength(Class<T> cla, int start, int length) {
        return liteOrm.<T>query(new QueryBuilder(cla).appendOrderDescBy("_id").limit(start, length).distinct(true));
    }


    /**
     * 删除所有 某字段等于 Vlaue的值
     *
     * @param cla
     * @param field
     * @param value
     */
    public <T> boolean deleteWhere(Class<T> cla, String field, Object value) {
        int delete = liteOrm.delete(cla, WhereBuilder.create(cla).where(field + "=?", value));
        return delete < 0;
    }

    /**
     * 删除一个数据 可传一个类 按ID删
     * @param t
     * @param <T>
     */
    public <T> void delete( T t){
        liteOrm.delete( t ) ;
    }

    /**
     * 删除一个表
     * @param cla
     * @param <T>
     */
    public <T> void delete( Class<T> cla ){
        liteOrm.delete( cla ) ;
    }

    /**
     * 删除集合中的数据
     * @param list
     * @param <T>
     */
    public <T> void deleteList( List<T> list ){
        liteOrm.delete( list ) ;
    }

    /**
     * 删除所有
     *
     * @param cla
     */
    public <T> void deleteAll(Class<T> cla) {
        liteOrm.deleteAll(cla);
    }

    /**
     * 仅在以存在时更新
     *
     * @param t
     */
    public boolean update(Class t, ColumnsValue cv, String where, Object value) {
        int update = liteOrm.update(new WhereBuilder(t, where + " = ?", new Object[]{value}), cv, ConflictAlgorithm.Replace);
        return update > 0;
    }


    public <T> void updateALL(List<T> list) {
        liteOrm.update(list);
    }

    public void exit(){
        if (util != null){
            util = null;
            liteOrm = null;
        }

    }


//	public static void Text(){
//
//		//我们把这个对象当做以填充数据的后的对象
//		Conversation mConversation = new Conversation();
//
//		List<Conversation> list = new ArrayList<Conversation> ();
//		for (int i = 0; i < 10; i++) {
//			list.add(mConversation);
//		}
//
//
//		//1、插入单条数据
//		LiteOrmDBUtil.insert(mConversation);
//
//		//2、插入多条数据
//		LiteOrmDBUtil.insertAll(list);
//
//		//3、查询Conversation表中所有记录
//		List<Conversation> list = LiteOrmDBUtil.getQueryAll(Conversation.class);
//
//		//4、查询Conversation表中 isVisibility 字段 等于 true 的记录
//		List<Conversation> list =  LiteOrmDBUtil.getQueryByWhere(Conversation.class, Conversation.ISVISIBILITY, new String[]{"true"});
//
//		//5、查询Conversation表中 isVisibility 字段 等于 true 的记录,并且只取20条
//		List<Conversation> list =  LiteOrmDBUtil.getQueryByWhereLength(Conversation.class, Conversation.ISVISIBILITY, new String[]{"true"},0,20);
//
//		//6、删除Conversation表中 isVisibility 字段 等于 true 的记录
//		LiteOrmDBUtil.deleteWhere(Conversation.class,Conversation.ISVISIBILITY , new String[]{"true"});
//
//		//7、删除所有
//		LiteOrmDBUtil.deleteAll(Conversation.class);
//
//
//	}

}